#include "FpSerialPort.h"


FpSerialPort::FpSerialPort(QObject* parent /*= nullptr*/):
	QSerialPort(parent)
{

}

FpSerialPort::FpSerialPort(FpSpCfgData spCfg, QObject* parent /*= nullptr*/):
	QSerialPort(parent)
{
	int setRet =  SetSerialPort(std::move(spCfg));
}

int FpSerialPort::SetSerialPort(FpSpCfgData spCfg)
{
	_spCfg = spCfg;
	int ret = 0;
	if (spCfg._portName.contains("COM"))
	{
		setPortName(spCfg._portName);
	}
	else
	{
		ret += 1;
	}
	if (!setBaudRate(spCfg._baudRate))
	{
		ret += 2;
	}
	if (!setDataBits(spCfg._dataBits))
	{
		ret += 4;
	}
	if (!setStopBits(spCfg._stopBits))
	{
		ret += 8;
	}
	if (!setFlowControl(spCfg._flowCtr))
	{
		ret += 16;
	}
	if (!setParity(spCfg._parity))
	{
		ret += 32;
	}
	return ret;
}

bool FpSerialPort::setPortName(const QString& name)
{
	if (!name.contains("COM"))
	{
		return false;
	}
	QSerialPort::setPortName(name);
	_spCfg._portName = name;
	return true;
}

bool FpSerialPort::setBaudRate(BaudRate baudRate, Directions directions /* = AllDirections */)
{
	if (QSerialPort::setBaudRate(baudRate, directions)) {
		_spCfg._baudRate = baudRate;
		return true;
	}
	else
	{
		return false;
	}
}

bool FpSerialPort::setDataBits(DataBits dataBits)
{
	if (QSerialPort::setDataBits(dataBits))
	{
		_spCfg._dataBits = dataBits;
		return true;
	}
	else {
		return false;
	}
}

bool FpSerialPort::setStopBits(StopBits stopBits)
{
	if (QSerialPort::setStopBits(stopBits))
	{
		_spCfg._stopBits = stopBits;
		return true;
	}
	else {
		return false;
	}
}

bool FpSerialPort::setFlowControl(FlowControl flowControl)
{
	if (QSerialPort::setFlowControl(flowControl))
	{
		_spCfg._flowCtr = flowControl;
		return true;
	}
	else {
		return false;
	}
}

bool FpSerialPort::setParity(Parity parity)
{
	if (QSerialPort::setParity(parity))
	{
		_spCfg._parity = parity;
		return true;
	}
	else {
		return false;
	}
}

FpSpCfgData FpSerialPort::GetSerialPortInfo()
{
	return _spCfg;
}
